package com.blb.ioc.demo3;

import java.lang.reflect.Field;

/**
 * 工厂模式
 */
public class ComputerFactory {

    /**
     * 传入对象的类型，创建对象，返回对象
     * @param clazz
     * @return
     */
    public Object getBean(Class clazz) throws IllegalAccessException, InstantiationException {
        //创建对象
        Object obj = clazz.newInstance();
        //找到类里面所有的属性
        Field[] fields = clazz.getDeclaredFields();
        //遍历所有属性
        for(Field field : fields){
            //判断有没有MyValue注解
            MyValue myValue = field.getDeclaredAnnotation(MyValue.class);
            if(myValue != null){
                //读取配置的字符串值
                String value = myValue.value();
                //把值赋值给属性
                field.setAccessible(true);
                field.set(obj,value);
            }
            //判断MyComponent注解
            MyComponent component = field.getDeclaredAnnotation(MyComponent.class);
            if(component != null){
                //读取组件的类型
                Class componentClass = component.value();
                //创建组件对象
                Object componetObj = componentClass.newInstance();
                //将组件对象赋值给属性
                field.setAccessible(true);
                field.set(obj,componetObj);
            }
        }
        return obj;
    }
}
